package main

import (
	"expvar"
	"fmt"
	"github.com/gin-gonic/gin"
)

func Expvar(ctx *gin.Context) {
	ctx.Writer.Header().Set("Content-Type", "application/json; charset=uft-8")

	// 定义一个变量，用于标记是否是第一条数据
	first := true

	// 定义一个报告函数，用于将 expvar 变量的键值对写入 HTTP 响应
	report := func(key string, value interface{}) {
		// 如果不是第一条数据，则在前面添加换行
		if !first {
			fmt.Fprintf(ctx.Writer, "\n")
		}

		first = false

		// 判断 value 是否为字符串类型，如果是，则使用 %q 格式化字符串
		if str, ok := value.(string); ok {
			fmt.Fprintf(ctx.Writer, "%q: %q", key, str)
		} else {
			// 否则使用 %v 格式化其它类型的值
			fmt.Fprintf(ctx.Writer, "%q: %v", key, value)
		}
	}

	fmt.Fprintf(ctx.Writer, "{\n")

	// 遍历所有的 expvar 变量，并调用 report 函数将其键值对写入 HTTP 响应
	expvar.Do(func(kv expvar.KeyValue) {
		report(kv.Key, kv.Value)
	})

	fmt.Fprintf(ctx.Writer, "\n}\n")
}
